iT邦幫忙

0

powershell的陣列

  • 分享至 

  • xImage
  •  

建立陣列

使用「逗號」來建立陣列

#一個陣列(內含三個元素)
PS R:\> $arr = 5, 6, 7
PS R:\> $arr
5
6
7

#一個陣列(內含一個元素)
PS R:\> $arr = ,100
PS R:\> $arr
100

#元素可以是不同型別
PS R:\> $arr = 100, 200, "abc"
PS R:\> $arr
100
200
abc

#小括弧的功能,並不是用來建立陣列,而是用來調整優先順序
PS R:\> $arr = (100, 200, "abc")
PS R:\> $arr.Count
3

#一個陣列(內含一個元素,元素本身是陣列)
PS R:\> $arr = ,(100, 200, "abc")
PS R:\> $arr.Count
1

#不加小括弧
PS R:\> $arr = ,100, 200, "abc"
PS R:\> $arr.Count
3

命令的可能結果

#$files的可能型別:
#   找到0 個txt:null
#   找到1 個txt:FileInfo
#   找到多個txt:陣列
PS R:\> $files = dir *.txt

使用 @() 傳回陣列

#$files的可能結果:
#   一個空陣列(長度0)
#   一個陣列(內含一個元素)
#   一個陣列(內含多個元素)

#如果不是陣列,就把它變成陣列
#如果已經是陣列了,就不管它
PS R:\> $files = @(dir *.txt)

不使用 @() 的話

#以為Length屬性是「找到的個數」
#結果是「檔案大小」
#原來,它只找到一個檔案,傳回了FileInfo物件
PS R:\> $files = dir *.ps1
PS R:\> $files.Length
631

#這裡的Length屬性是陣列長度
PS R:\> $files = @(dir *.ps1)
PS R:\> $files.Length
1

使用 @() 來建立空陣列

PS R:\> $arr = @()

() vs @()

#沒有找到檔案時,會報錯
PS R:\> (dir *.zip)[0]
無法編制 Null 陣列的索引。
位於 線路:1 字元:1

#沒有找到檔案時,不會報錯
PS R:\> @(dir *.zip)[0]
PS R:\> $null -eq @(dir *.zip)[0]
True

使用 .. 來建立陣列

# 起點、終點都有包含
PS R:\> 100 .. 102
100
101
102

# 遞減
PS R:\> 3 .. 1
3
2
1

function的傳回值

傳回的是,陣列裡的元素。不傳回陣列

#不只return是傳回值,其他地方也是
PS R:\> function myFunc{
>>     #這裡是傳回值
>>     100,200,300
>>
>>     #這裡也是傳回值
>>     return 700,800,900
>> }

#$r是一個陣列(內含6個元素)
PS R:\> $r = myFunc
PS R:\> $r.Count
6

PS R:\> function myFunc2{
>>     $a1 = 100,200,300
>>     $a2 = 700,800,900
>>
>>
>>     #這裡是傳回值
>>     $a1
>>
>>     #這裡也是傳回值
>>     return $a2
>> }

#$r是一個陣列(內含6個元素)
PS R:\> $r = myFunc2
PS R:\> $r.Count
6

在「陣列」前面加逗號,使它傳回陣列

PS R:\> function myFunc{
>>     #前面加逗號
>>     ,(100,200,300)
>>
>>     #前面加逗號
>>     return ,(700,800,900)
>> }

PS R:\> $r = myFunc
PS R:\> $r.Count
2

PS R:\> $r[0]
100
200
300

PS R:\> $r[1]
700
800
900


PS R:\> function myFunc2{
>>     $a1 = 100,200,300
>>     $a2 = 700,800,900
>>
>>
>>     #前面加逗號
>>     ,$a1
>>
>>     #前面加逗號
>>     return ,$a2
>> }

PS R:\> $r = myFunc2
PS R:\> $r.Count
2

PS R:\> $r[0]
100
200
300

PS R:\> $r[1]
700
800
900

陣列取值

負的索引值

PS R:\> $arr = 100, 200, 300
PS R:\> $arr[-1]
300

# 0 到 -1 並不是全部
PS R:\> $arr[0..-1]
100
300

PS R:\> 0..-1
0
-1

中括弧內可以放陣列

#只有取值可以這樣做。設值不行。
PS R:\> $arr = 100, 200, 300
PS R:\> $i = 2, 1, 0
PS R:\> $arr[$i]
300
200
100

陣列的屬性值

PS R:\> $files =  @(dir *.txt)

#使用「陣列自己」的屬性值
PS R:\> $files.Length
3

#使用「元素」的屬性值
PS R:\> $files.LastWriteTime

2022年4月12日 下午 06:45:11
2022年5月29日 上午 08:00:13
2022年5月30日 下午 08:06:53

陣列設值

陣列向等號左邊設值

#變數個數相同
PS R:\> $arr = 100, 200, 300
PS R:\> $a, $b, $c = $arr
PS R:\> $a
100
PS R:\> $b
200
PS R:\> $c
300

#變數個數少
PS R:\> $a, $b = $arr
PS R:\> $a
100
PS R:\> $b
200
300

#變數個數多
PS R:\> $a, $b, $c, $d = $arr
PS R:\> $a
100
PS R:\> $b
200
PS R:\> $c
300
PS R:\> $d
PS R:\> $null -eq $d
True

陣列加法

陣列 + 陣列

PS R:\> $arr1 = 100, 200, 300
PS R:\> $arr2 = 400, 500, 600

#加入的是元素
PS R:\> $r = $arr1 + $arr2
PS R:\> $r.Count
6

#前面放逗號,加入陣列
PS R:\> $r = $arr1 + ,$arr2
PS R:\> $r.Count
4

陣列 + 元素

PS R:\> $arr1 = 100, 200, 300

#把 500 放到陣列後面
PS R:\> $r = $arr1 + 500
PS R:\> $r.Count
4

#把 500 放到陣列前面
PS R:\> $r = 500 + $arr1
方法引動過程失敗,因為 [System.Object[]] 未包含名為 'op_Addition' 的方法。
位於 線路:1 字元:1

#用 @() 轉成陣列,再相加
PS R:\> $r = @(500) + $arr1
PS R:\> $r.Count
4

陣列乘法

PS R:\> $arr1 = 100, 200, 300

# 倍數要放在右邊
PS R:\> $r = $arr1 * 3
PS R:\> $r.Count
9

# 倍數不能放在左邊
PS R:\> $r = 3 * $arr1
方法引動過程失敗,因為 [System.Object[]] 未包含名為 'op_Multiply' 的方法。
位於 線路:1 字元:1

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言